.TH std::ranges::view_interface::size 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::ranges::view_interface::size \- std::ranges::view_interface::size

.SH Synopsis
   constexpr auto size() requires ranges::forward_range<D> &&

       std::sized_sentinel_for<ranges::sentinel_t<D>,                 \fB(1)\fP \fI(since C++20)\fP

                               ranges::iterator_t<D>>;
   constexpr auto size() const requires ranges::forward_range<const
   D> &&
                                                                      \fB(2)\fP \fI(since C++20)\fP
       std::sized_sentinel_for<ranges::sentinel_t<const D>,

                               ranges::iterator_t<const D>>;

   The default implementation of size() member function obtains the size of the range
   by calculating the difference between the sentinel and the beginning iterator.

   1) Let derived be static_cast<D&>(*this). Equivalent to return
   /*to-unsigned-like*/(ranges::end(derived) - ranges::begin(derived));, where the
   exposition-only function template to-unsigned-like performs the explicit cast from
   the argument type to its corresponding unsigned type.
   2) Same as \fB(1)\fP, except that derived is static_cast<const D&>(*this).

.SH Parameters

   \fI(none)\fP

.SH Return value

   The difference between the sentinel and the beginning iterator of the value of the
   derived type, converted to its corresponding unsigned type.

.SH Notes

   Following derived types may use the default implementation of size():

     * std::ranges::drop_while_view

   Following types are derived from std::ranges::view_interface and do not declare
   their own size() member function, but they cannot use the default implementation,
   because their iterator and sentinel types never satisfy sized_sentinel_for:

     * std::ranges::basic_istream_view
     * std::ranges::filter_view
     * std::ranges::join_view
     * std::ranges::lazy_split_view
     * std::ranges::split_view
     * std::ranges::take_while_view

   Defect reports

   The following behavior-changing defect reports were applied retroactively to
   previously published C++ standards.

      DR    Applied to            Behavior as published              Correct behavior
   LWG 3646 C++20      the default implementations of size         they return unsigned
                       functions returned a signed type            type

.SH See also

   size
   ssize         returns the size of a container or array
   \fI(C++17)\fP       \fI(function template)\fP
   (C++20)
   ranges::size  returns an integer equal to the size of a range
   (C++20)       (customization point object)
   ranges::ssize returns a signed integer equal to the size of a range
   (C++20)       (customization point object)
